﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Caixa.Model;
using Caixa.DB;
using System.Data.Common;
using System.Collections;
using System.Data;

namespace Caixa.DAO
{
	public static class CaixaEletronicoDAO
	{
		#region " Methods "

		#region " Get Methods "

		public static CaixaEletronico GetByID(int id)
		{
			CaixaEletronico c = null;

			using (DAHelper db = new DAHelper())
			{
				string SQL = string.Format(@"
					SELECT 
						{1}, {2}, {3}
					FROM {0}
					WHERE
						{1} = :{1}
				",
					CaixaEletronico.Fields.TABELA,
					CaixaEletronico.Fields.ID,
					CaixaEletronico.Fields.IDAGENCIA,
					CaixaEletronico.Fields.SALDO
				);

				// Prepara os parâmetros da Query
				List<DbParameter> parms = new List<DbParameter>();
				parms.Add(db.GetParameter(CaixaEletronico.Fields.ID, id));

				// Executa a query no Banco de dados
				IEnumerator data = db.SelectSqlDr(SQL, parms.ToArray()).GetEnumerator();

				// Converte o resultado do Banco de dados em objeto
				c = DAHelper.ToModel<CaixaEletronico>(data);
			}

			return c;
		}

		#endregion

		#region " DDL Methods "

		public static int Insert(CaixaEletronico c)
		{
			int newID = 0;

			using (DAHelper db = new DAHelper())
			{
				// Prepara os parâmetros da Query
				List<DbParameter> parms = new List<DbParameter>();
				parms.Add(db.GetParameter(CaixaEletronico.Fields.IDAGENCIA, c.IDAgencia));
				parms.Add(db.GetParameter(CaixaEletronico.Fields.SALDO, c.Saldo, DbType.Double));

				// Executa a query no Banco de dados e retorna o ID do novo registro
				newID = db.InsertSql(CaixaEletronico.Fields.TABELA, parms.ToArray());
			}

			return newID;
		}

		public static bool Update(CaixaEletronico c)
		{
			bool success = false;

			using (DAHelper db = new DAHelper())
			{
				// Prepara os parâmetros da Query
				List<DbParameter> parms = new List<DbParameter>();
				parms.Add(db.GetParameter(CaixaEletronico.Fields.IDAGENCIA, c.IDAgencia));
				parms.Add(db.GetParameter(CaixaEletronico.Fields.SALDO, c.Saldo, DbType.Double));

				// Define a cláusula where do Update
				string sWhere = string.Format("{0} = {1}", CaixaEletronico.Fields.ID, c.ID);

				// Executa a query no Banco de dados e retorna se foi atualizado com sucesso
				success = db.UpdateSql(CaixaEletronico.Fields.TABELA, parms.ToArray(), sWhere);
			}

			return success;
		}

		public static bool Delete(CaixaEletronico c)
		{
			bool success = false;

			using (DAHelper db = new DAHelper())
			{
				// Define a cláusula where do Delete
				string sWhere = string.Format("{0} = {1}", CaixaEletronico.Fields.ID, c.ID);

				// Executa a query no Banco de dados e retorna se o registro foi excluido com sucesso
				success = db.DeleteSql(CaixaEletronico.Fields.TABELA, sWhere);
			}

			return success;
		}

		#endregion

		#endregion
	}
}
